{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import random\r\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 种群初始基因型\r\n",
    "AA = 30000\r\n",
    "Aa = 60000\r\n",
    "aa = 10000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#模拟分离定律\r\n",
    "def segregation(n):\r\n",
    "    results = []\r\n",
    "    for _ in range(n):\r\n",
    "        r = random.randint(0,3)\r\n",
    "        if r==0:    results.append(0)\r\n",
    "        if r in [1,2]:    results.append(1)\r\n",
    "        if r==3:    results.append(2)\r\n",
    "    return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 根据亲本基因型确定子代基因型\r\n",
    "def GenerateChild(parents):\r\n",
    "    ChildNum = random.randint(1,2) #子代个数\r\n",
    "    parents.sort()\r\n",
    "    if parents[0]==0 and parents[1]==0: # AA*AA\r\n",
    "        return [0]*ChildNum\r\n",
    "    elif parents[0]==1 and parents[1]==1: # Aa*Aa\r\n",
    "        return segregation(ChildNum)\r\n",
    "    elif parents[0]==2 and parents[1]==2: # aa*aa\r\n",
    "        return [2]*ChildNum\r\n",
    "    elif parents[0]==0 and parents[1]==1: # AA*Aa\r\n",
    "        return [random.choice([0,1]) for _ in range(ChildNum)]\r\n",
    "    elif parents[0]==0 and parents[1]==2: # AA*aa\r\n",
    "        return [1]*ChildNum\r\n",
    "    elif parents[0]==1 and parents[1]==2: # Aa*aa\r\n",
    "        return [random.choice([1,2]) for _ in range(ChildNum)]\r\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#自由交配\r\n",
    "def FreeMating():\r\n",
    "    global GenePool\r\n",
    "    children = []\r\n",
    "    for _ in range(int(len(GenePool)*0.67)): #模拟自由交配数为个体总数的0.67倍，以控制子代数量\r\n",
    "        children.extend(GenerateChild(random.choices(GenePool,k=2)))\r\n",
    "    GenePool = list(children)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "GenePool = [0 for _ in range(AA)] + [1 for _ in range(Aa)] + [2 for _ in range(aa)] #重置基因库\r\n",
    "\r\n",
    "HisFreq = [] # 记录每代基因型数量\r\n",
    "for _ in range(100):\r\n",
    "    HisFreq.append((GenePool.count(0),GenePool.count(1),GenePool.count(2)))\r\n",
    "    FreeMating()\r\n",
    "    print(str(len(GenePool))+',n='+str(_))\r\n",
    "print(\"AA\\tAa\\taa\")\r\n",
    "for t in HisFreq:\r\n",
    "    print(str(round(t[0]/sum(t),3))+'\\t'+str(round(t[1]/sum(t),3))+'\\t'+str(round(t[2]/sum(t),3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘图，基因型频率\r\n",
    "plt.plot(range(len(HisFreq)),[(t[0]/sum(t)) for t in HisFreq],'r',label=\"AA\")\r\n",
    "plt.plot(range(len(HisFreq)),[(t[1]/sum(t)) for t in HisFreq],'g',label=\"Aa\")\r\n",
    "plt.plot(range(len(HisFreq)),[(t[2]/sum(t)) for t in HisFreq],'b',label=\"aa\")\r\n",
    "plt.xlabel(\"Generation\")\r\n",
    "plt.ylabel(\"Genotype frequency\")\r\n",
    "plt.legend(loc=1)\r\n",
    "plt.savefig('./a0000.jpg',dpi=300)\r\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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DQwys35mlgpcRL272Lr7ZnfPdPdsd88GZgJnu3uumWVFOsgxs/7AIGB5HGMVEZG9iFszlLtXm9k1wOtAMvCwuy80s1uBXHeftpfJTwBuNbMqoBa42t2L4xWriIjsnbl7U8fQKHJycjw3N7epwxAROaSYWZ6750Qrpyu4RUQkKiULERGJSslCRESiUrIQEZGolCxERCQqJQsREYlKyUJERKJSshARkaiULEREJColCxERiUrJQkREolKyEBGRqJQsREQkKiULERGJSslCRESiUrIQEZGolCxERCQqJQsREYlKyUJERKJSshARkaiULEREJColCxERiUrJQkREolKyEBGRqJQsREQkKiULERGJSslCRESiUrIQEZGolCxERCQqJQsREYlKyUJERKJSshARkaiULEREJColC5F6tlRs4b9m/BevLHmlqUORFqSyphJ3b+ow9qpVUwcgkgjcnakLpnLDP25gTckaUpJSmH7JdE4fcHpThyYJYnP5Zq5//XoWrF/AlWOu5NIjL6VNSpv9np+7M2v1LO796F6eWfgMbVPaMjRrKEOzhjK863CGdx3OiK4j6NauWyOuxf6zRM9mscrJyfHc3NymDkPiZMO2DXyy7hM+Wf8JizcspmBrAQVbCqisqeSS4Zdw+ZjL6Zredb/nfdFzF/HWirfI6ZHDHafewQ//8UOWFS/j7cveZnzP8Y28NnKomVkwk4ufv5hVm1dxeObhLCxcSGbbTC4YegGZbTNpl9qOTmmdyO6UTXanbLLSsyjaVsTakrUUbClgSfESFhctZsXGFdR4DYaxqXwT+Rvy6dC6A1NGTMEwFhYuZGHhQjZs27B92cf0PoZbTryF0/qfhpntEltNbQ1FZUX7/f03szx3z4laTslCDqZar+X+2feTnprOlBFTSElO2W2Z5RuX88GqD3jn83eYsXIGyzcu3/5+p7RO9OnYh14delFSWcK7K98lJSmF84aex7dHf5uTs08mOSk5pngWb1jMWU+exeotq7l74t1cOeZKkpOSWbN1Dcc9chybyzfz4KQH6dymM62TWzM4YzBZ6VmN9nlI7Gpqa6iqraKqporSqlIKthTwxeYvWFuylmRLJjU5lTYpbTiy25Ecnnk4SXbgrezbqrZx5/t3cvt7t9O7Y2+e/PqTTOg1gfe+eI+7PryLN5e/SWlVaUzz6t2hNwO6DCAl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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘图，基因频率\r\n",
    "\r\n",
    "HisGenotype = [(int(x+0.5*y),int(z+0.5*y)) for x,y,z in HisFreq] # 根据基因型数量计算基因数量\r\n",
    "plt.plot(range(len(HisGenotype)),[(t[0]/sum(t)) for t in HisGenotype],'b',label=\"A\")\r\n",
    "plt.plot(range(len(HisGenotype)),[(t[1]/sum(t)) for t in HisGenotype],'g',label=\"a\")\r\n",
    "plt.xlabel(\"Generation\")\r\n",
    "plt.ylabel(\"Gene frequency\")\r\n",
    "plt.legend(loc=1)\r\n",
    "plt.savefig('./b0000.jpg',dpi=300)\r\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "PaddlePaddle 2.1.0 (Python 3.5)",
   "language": "python",
   "name": "py35-paddle1.2.0"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
